﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VFTray.Mi
{
    internal class AuthUtility
    {
        private SoftKey ytsoftkey;
        private static string KeyPath;
        internal bool Load()
        {
#if !NOKEY
            ytsoftkey = new SoftKey();
            
            //这个用于判断系统中是否存在着加密锁。不需要是指定的加密锁,
            if (ytsoftkey.FindPort(0, ref KeyPath) != 0)
            {
                return false;
            }

            //RegisterDeviceNotification(FormHandle);//注册加密锁事件插拨通知
            bool a = CheckID() && Check1() && Check2() && Check4() && Check5();
            return a;
#else
            return true;
#endif
            //return a && CheckDate();
        }

        private bool CheckID()
        {
            int id1 = 0, id2 = 0;
            ytsoftkey.GetID(ref id1, ref id2, KeyPath);
            string sid = id1.ToString("X") + id2.ToString("X");
            return ("13731BF3A11952D1" == sid);
        }
        private bool Check1()
        {
            //使用普通算法一来检查是否存在指定的加密锁
            return (ytsoftkey.CheckKeyByFindort_2() == 0);
        }
        private bool Check2()
        {
            //使用增强算法一来检查是否存在指定的加密锁
            int ret;
            ret = ytsoftkey.CheckKeyByEncstring();
            return (ret == 0);
            //if (ret == 1)
            //{
            //    MessageBox.Show("你生成加密代码时没有设置该函数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    return;
            //}
            //if (ret == 0)
            //{
            //    MessageBox.Show("找到指定的加密锁", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //}
            //else
            //{
            //    MessageBox.Show("未能找到指定的加密锁", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //}
        }

        //public bool CheckDate()
        //{
        //    //使用读写储存器来检查是否存在指定的加密锁
        //    int ret;
        //    string outs = "";
        //    ret = ytsoftkey.CheckKeyByReadEprom(ref outs);
        //    if (ret != 0) return false;
        //    try
        //    {
        //        string[] arr = outs.Split(new char[] { '_' });
        //        DateTime dt = DateTime.ParseExact(arr[2], "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
        //        if (dt < DateTime.Now)
        //        {
        //            return false;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        System.Diagnostics.Debug.WriteLine(ex.Message);
        //        return false;
        //    }
        //    return true;
        //    //if(ret==0)
        //    {
        //        //try
        //        //{
        //        //    string[] arr = outs.Split(new char[] { '_' });
        //        //    DateTime dt = DateTime.ParseExact(arr[2], "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
        //        //    if (dt < DateTime.Now)
        //        //    {
        //        //        ytsoftkey.YWriteString("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1, "FA1ED1EE", "1666024C", ytsoftkey.PathStorary);
        //        //        return false;
        //        //    }

        //        //    System.Diagnostics.Debug.WriteLine(arr[0]);
        //        //}
        //        //catch (Exception ex)
        //        //{
        //        //    System.Diagnostics.Debug.WriteLine(ex.Message);
        //        //    return false;
        //        //}
        //    }
        //    //return (ret==0);
        //}

        private bool Check4()
        {
            //使用普通算法二来检查是否存在指定的加密锁
            int ret = ytsoftkey.CheckKeyByFindort_3();
            return (ret == 0);
            //if ( ret== 0)
            //{
            //    MessageBox.Show("找到指定的加密锁", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //}
            //else
            //{
            //    if(ret<0)
            //    {
            //        MessageBox.Show("未能找到指定的加密锁", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    }
            //    else
            //    {
            //        if (ret == 1)
            //        {
            //            MessageBox.Show("你生成加密代码时没有设置该函数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //            return;
            //        }
            //        if (ret == 2)
            //        {
            //            MessageBox.Show("当前锁不支持这个功能。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //            return;
            //        }
            //    }
            //}
        }

        private bool Check5()
        {
            //使用增强算法二来检查是否存在指定的加密锁
            int ret;
            ret = ytsoftkey.CheckKeyByEncstring_New();
            return (ret == 0);
            //if (ret =k= 0)
            //{
            //    MessageBox.Show("找到指定的加密锁", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //}
            //else
            //{
            //    if (ret < 0)
            //    {
            //        MessageBox.Show("未能找到指定的加密锁", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    }
            //    else
            //    {
            //        if (ret == 2)
            //        {
            //            MessageBox.Show("当前锁不支持这个功能。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //            return;
            //        }
            //    }
            //}
        }

        internal string GetContent()
        {
            ytsoftkey = new SoftKey();
			return ytsoftkey.CheckKeyByReadEprom();
		}
    }
}
